#ifndef _TDA_SHEET_H_

#define _TDA_SHEET_H_

#include "common.h"

#define INIT_CHOP		1000
#define CHOP_SIZE		1000
#define MIN_OCTAVE		1
#define MAX_OCTAVE		10000
#define MAX_NOTES		12
#define BEMOL_FLAG		'b'
#define SOST_FLAG		's'

typedef struct {
	float start_t;
	float length;
	unsigned char octave;
	notes_t note;
	float frequency;
} note_struct_t;

typedef struct{

	float total_t;
	int notes_qty;
	note_struct_t * sheet;
	
} adt_sheet_t;

 /*primitivas*/
 
status_t adt_sheet_new (adt_sheet_t ** pp_adt_sheet, FILE * sheet_data); /*en caso de error no se debe llamar a la funcion destroy,esta funcion devuelve NULL por interfaz, y la razon de la falla en el status_t*/
status_t adt_sheet_load_data (adt_sheet_t * p_adt_sheet, FILE * fi); /*en caso de error no se debe llamar a la funcion destroy,esta funcion devuelve NULL por interfaz, y la razon de la falla en el status_t*/
status_t adt_sheet_destroy(adt_sheet_t ** pp_adt_sheet);

int adt_sheet_get_notes_qty(adt_sheet_t * p_adt_sheet);
float adt_sheet_get_start_t(adt_sheet_t * p_adt_sheet,size_t n_note);
float adt_sheet_get_length(adt_sheet_t * p_adt_sheet,size_t n_note);
unsigned char adt_sheet_get_octave(adt_sheet_t * p_adt_sheet,size_t n_note);
notes_t adt_sheet_get_note(adt_sheet_t * p_adt_sheet,size_t n_note);
float adt_sheet_get_frequency(adt_sheet_t * p_adt_sheet,size_t n_note);
float adt_sheet_get_total_t(adt_sheet_t * p_adt_sheet);

 /*primitivas internas*/

status_t adt_sheet_set_start_t(adt_sheet_t * p_adt_sheet,float time,size_t n_note);
status_t adt_sheet_set_note(adt_sheet_t * p_adt_sheet,char * s,size_t n_note);
status_t adt_sheet_set_length(adt_sheet_t * p_adt_sheet,float time,size_t n_note);
status_t adt_sheet_set_frequency(adt_sheet_t * p_adt_sheet,float frequency,size_t n_note);
status_t adt_sheet_set_total_t(adt_sheet_t * p_adt_sheet,float total_t);
status_t adt_sheet_set_notes_qty(adt_sheet_t * p_adt_sheet,int notes_qty);


#endif
